import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:webview_flutter/webview_flutter.dart';
import 'dart:developer' as developer;
import 'dart:io' show Platform;
import 'package:webview_flutter_android/webview_flutter_android.dart';

class PlayaiController extends GetxController {
  PlayaiController();

  late final WebViewController webViewController;
  final isLoading = true.obs;
  final hasError = false.obs;
  final errorMessage = ''.obs;
  final loadingProgress = 0.obs;
  
  // 🎤 语音录音状态管理 (已禁用)
  // final isVoiceRecording = false.obs;
  // final isVoiceProcessing = false.obs;
  // 
  // // 🔒 防止多次处理的锁
  // bool _isProcessingAudio = false;

  void setLoading(bool loading) {
    isLoading.value = loading;
    if (loading) {
      hasError.value = false;
    }
  }

  void setError(bool error, {String message = ''}) {
    hasError.value = error;
    errorMessage.value = message;
    if (error) {
      isLoading.value = false;
    }
  }

  void updateLoadingProgress(int progress) {
    loadingProgress.value = progress;
  }

  void reload() {
    _loadHtmlFromAssets();
  }

  Future<void> _loadHtmlFromAssets() async {
    setLoading(true);
    try {
      // 使用延迟确保WebView完全初始化
      await Future.delayed(const Duration(milliseconds: 100));
      
      if (Platform.isIOS) {
        // iOS: 直接加载Flutter资源文件，这样可以正确处理相对路径
        await webViewController.loadFlutterAsset('assets/ai-html/sousuo.html');
        developer.log('iOS: 使用loadFlutterAsset加载HTML文件');
      } else {
        // Android: 使用原有的方法
        final htmlContent =
            await rootBundle.loadString('assets/ai-html/sousuo.html');

        const baseUrl = 'file:///android_asset/flutter_assets/assets/ai-html/';
        final htmlWithBase = htmlContent.replaceFirst(
          '<head>',
          '<head>\n<base href="$baseUrl">',
        );

        await webViewController.loadHtmlString(htmlWithBase);
        developer.log('Android: 使用loadHtmlString加载HTML文件');
      }
    } catch (e) {
      developer.log('加载本地HTML文件出错: $e');
      setError(true, message: '加载本地HTML文件出错: $e');
    }
  }

  @override
  void onInit() {
    super.onInit();
    developer.log('PlayaiController onInit');

    webViewController = WebViewController()
      ..setJavaScriptMode(JavaScriptMode.unrestricted)
      ..setBackgroundColor(const Color(0x00000000))
      ..setNavigationDelegate(
        NavigationDelegate(
          onProgress: (int progress) {
            updateLoadingProgress(progress);
          },
          onPageStarted: (String url) {
            developer.log('WebView页面开始加载: $url');
            // setLoading(true) is now handled in _loadHtmlFromAssets
          },
          onPageFinished: (String url) {
            developer.log('WebView页面加载完成: $url');
            setLoading(false);
          },
          onWebResourceError: (WebResourceError error) {
            // 过滤掉常见的无关错误
            if (error.url != null && 
                (error.url!.contains('placeholder.com') || 
                 error.url!.contains('about:blank'))) {
              return;
            }
            
            // 过滤掉网络相关的非致命错误
            if (error.errorCode == -2 || // net::ERR_INTERNET_DISCONNECTED
                error.errorCode == -3 || // net::ERR_NETWORK_CHANGED
                error.errorCode == -6) { // net::ERR_FILE_NOT_FOUND (for assets)
              developer.log('WebView非致命错误 (已忽略): ${error.description}');
              return;
            }
            
            developer.log(
                'WebView加载错误: ${error.description}, 错误代码: ${error.errorCode}, URL: ${error.url}');
            setError(true,
                message: '${error.description} (${error.errorCode})');
          },
        ),
      );

    if (webViewController.platform is AndroidWebViewController) {
      (webViewController.platform as AndroidWebViewController)
          .setMediaPlaybackRequiresUserGesture(false);
    }

    _loadHtmlFromAssets();
  }

  // 🎤 开始语音录音（由MainController调用）- 已禁用
  // void startVoiceRecording() {
  //   developer.log('🎤 [状态] 开始录音 - 当前状态: recording=${isVoiceRecording.value}, processing=${isVoiceProcessing.value}, lock=$_isProcessingAudio');
  //   
  //   // 🔒 如果正在处理音频，先强制重置
  //   if (_isProcessingAudio) {
  //     developer.log('⚠️ [状态] 检测到音频处理中，强制重置状态');
  //     _forceResetVoiceState();
  //   }
  //   
  //   isVoiceRecording.value = true;
  //   isVoiceProcessing.value = false;
  //   developer.log('✅ [状态] 录音状态已设置');
  // }

  // // 🎤 停止语音录音，开始处理
  // void stopVoiceRecording() {
  //   developer.log('🎤 [状态] 停止录音，开始处理 - 当前状态: recording=${isVoiceRecording.value}, processing=${isVoiceProcessing.value}');
  //   
  //   isVoiceRecording.value = false;
  //   isVoiceProcessing.value = true;
  //   developer.log('✅ [状态] 处理状态已设置');
  // }

  // // 🎤 完成语音处理
  // void finishVoiceProcessing() {
  //   developer.log('🎤 [状态] 完成语音处理 - 当前状态: recording=${isVoiceRecording.value}, processing=${isVoiceProcessing.value}');
  //   
  //   isVoiceRecording.value = false;
  //   isVoiceProcessing.value = false;
  //   _isProcessingAudio = false;
  //   developer.log('✅ [状态] 所有状态已重置');
  // }

  // // 🔧 强制重置语音状态（用于修复状态混乱）
  // void _forceResetVoiceState() {
  //   developer.log('🔧 [重置] 强制重置所有语音状态');
  //   isVoiceRecording.value = false;
  //   isVoiceProcessing.value = false;
  //   _isProcessingAudio = false;
  //   developer.log('✅ [重置] 状态重置完成');
  // }
  // 
  // // 🔧 公开的强制重置方法（供外部调用）
  // void forceResetVoiceState() {
  //   _forceResetVoiceState();
  // }

  // 🎤 处理来自Flutter的音频数据 - 已禁用
  // Future<void> processAudioFromFlutter(String audioData) async {
  //   // 🔒 防重复处理锁检查
  //   if (_isProcessingAudio) {
  //     developer.log('⚠️ [音频处理] 已有音频在处理中，跳过本次请求');
  //     return;
  //   }
  //   
  //   _isProcessingAudio = true;
  //   developer.log('🎤 [音频处理] 开始处理音频数据，长度: ${audioData.length}');
  //   
  //   try {
  //     // 切换到处理状态
  //     stopVoiceRecording();
  //     
  //     // 等待WebView完全加载
  //     if (isLoading.value) {
  //       developer.log('⏳ [音频处理] WebView还在加载中，等待加载完成...');
  //       // 等待最多3秒钟WebView加载完成（减少等待时间）
  //       int attempts = 0;
  //       while (isLoading.value && attempts < 30) {
  //         await Future.delayed(const Duration(milliseconds: 100));
  //         attempts++;
  //       }
  //     }
  //     
  //     if (isLoading.value) {
  //       developer.log('❌ [音频处理] WebView加载超时，无法处理音频');
  //       finishVoiceProcessing();
  //       return;
  //     }
  //     
  //     // 构造JavaScript调用代码
  //     final jsCode = '''
  //       (function() {
  //         try {
  //           if (typeof processAudioFromBase64 === 'function') {
  //             return processAudioFromBase64('$audioData');
  //           } else if (typeof processAudio === 'function') {
  //             return processAudio('$audioData');
  //           } else {
  //             return 'processAudio function not found';
  //           }
  //         } catch (e) {
  //           return 'JS Error: ' + e.message;
  //         }
  //       })()
  //     ''';
  //     
  //     developer.log('📲 [音频处理] 向WebView发送JavaScript调用...');
  //     
  //     // 执行JavaScript代码
  //     webViewController.runJavaScript(jsCode);
  //     developer.log('✅ [音频处理] JavaScript代码已发送');
  //     
  //     // 🔧 优化：减少延迟时间，避免状态混乱
  //     await Future.delayed(const Duration(milliseconds: 800));
  //     
  //     // 🔧 检查状态是否还是处理中（防止被其他操作干扰）
  //     if (_isProcessingAudio && isVoiceProcessing.value) {
  //       finishVoiceProcessing();
  //     } else {
  //       developer.log('⚠️ [音频处理] 状态已被外部改变，跳过完成处理');
  //       _isProcessingAudio = false;
  //     }
  //     
  //   } catch (e) {
  //     developer.log('❌ [音频处理] 处理音频数据失败: $e');
  //     finishVoiceProcessing(); // 出错时也要结束处理状态
  //   }
  // }

  // 🎤 测试语音识别功能 - 已禁用
  // void testVoiceRecognition() {
  //   try {
  //     const jsCode = '''
  //       (function() {
  //         try {
  //           if (typeof testVoiceRecognition === 'function') {
  //             testVoiceRecognition();
  //             return 'Test voice recognition started';
  //           } else {
  //             return 'testVoiceRecognition function not found';
  //           }
  //         } catch (e) {
  //           return 'JS Error: ' + e.message;
  //         }
  //       })()
  //     ''';
  //     
  //     webViewController.runJavaScript(jsCode);
  //     developer.log('🧪 测试语音识别功能已启动');
  //     
  //   } catch (e) {
  //     developer.log('❌ 测试语音识别失败: $e');
  //   }
  // }

  // 🔧 强制重置AI检索状态（用于调试和测试）- 已禁用
  // void forceResetAIState() {
  //   try {
  //     const jsCode = '''
  //       (function() {
  //         try {
  //           if (window.app) {
  //             console.log('🔄 强制重置AI检索状态');
  //             window.app.isLoading = false;
  //             window.app.isThinking = false;
  //             window.app.thinkingStage = '';
  //             if (window.app.stopLoadingAnimation) {
  //               window.app.stopLoadingAnimation();
  //             }
  //             return 'AI state reset successfully';
  //           } else {
  //             return 'Vue app not found';
  //           }
  //         } catch (e) {
  //           return 'JS Error: ' + e.message;
  //         }
  //       })()
  //     ''';
  //     
  //     webViewController.runJavaScript(jsCode);
  //     developer.log('🔧 强制重置AI状态完成');
  //     
  //   } catch (e) {
  //     developer.log('❌ 强制重置AI状态失败: $e');
  //   }
  // }
}
